char(数字) 转换 int |
您所在的位置:网站首页 › int i=128 › char(数字) 转换 int |
刷题遇到一个考点是 char型数字 转 int 进行计算的问题。一看就会,一做就错,显然是在这里的认识薄弱了。将一番搜索的结果记录下来,以备再忘来打脸。 char的定义参考:Java基本数据类型之char。 首先,char 跟 int 这两种类型可以直接互转: char ch1 = 'a'; int i = ch1; char ch2 = (char)i;那么面对 char in = ‘2’ 需要转成 int 做计算,那么很自然想到把char 型变量直接赋给 int 型就能计算 了。 char in = '2'; int iVar = in; System.out.println(in); System.out.println(iVar); //输出: // 2 // 50想当然的做法果然错了:期望取出来的 int 2,实际却是 int 50。 当 char 直接 赋给 int 时,实际上是把 char 变量的ASCII 码赋给 int类型,因此取出char 变量的数值不能通过直接转换成int的方法实现。 方法一: 利用char变量使用 ASCII进行算术运算这一特征,可以得到一种间接计算获取数值的方法。 char ch1 = '8'; int iVar = ch1 - '0'; System.out.println(iVar); //输出 // 8'0'-'9' ASCII 为 48-57,且顺序一致,因而char数字之间的差值等于数字之间的差值 。 System.out.println('9'-'1' == 9-1); //true System.out.println('8'-'0' == 8); //true方法二: 使用 char 包装类Character提供的方法; char ch1 = '8'; Character.getNumericValue(ch1); // 8 //Character.digit(ch1,10); // 8方法三: 通过int 包装类 Integer 。 char ch2 = '8'; int i = Integer.parseInt(String.valueOf(ch2)); // 8方法一最快,方法三慢。测试代码如下: @Test public void test(){ int circle = 100000; StopWatch watch = new StopWatch(); char ch1 = '8'; watch.start("task1"); int count = 0; while (count++ < circle){ int i = ch1 - '0'; } watch.stop(); watch.start("task2"); count = 0; while (count++ < circle){ int i = Character.digit(ch1,10); } watch.stop(); watch.start("task3"); count = 0; while (count++ < circle){ int i = Integer.parseInt(String.valueOf(ch1)); } watch.stop(); System.out.println(watch.prettyPrint()); } 结果: --------------------------------------------- ns % Task name --------------------------------------------- 002761400 010% task1 003343100 012% task2 022454000 079% task3 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |